import allure,time
from selenium.webdriver.common.by import By
from page.page_common_steps import PageCommonSteps
from base.base_common import BaseCommon

class PageOrganizationMgt(PageCommonSteps):
    def __init__(self, driver):
        super().__init__(driver) # 继承公用方法
        # 元素：菜单栏/系统管理
        self.menu_system_mgt = By.XPATH, "//body/div[@id='app']/div[1]/div[1]/div[1]/div[2]/div[2]/ul[1]/li[4]"
        # 元素：菜单栏/组织机构管理
        self.menu_org_mgt = By.XPATH, "//body/div[@id='app']/div[1]/div[2]/ul[1]/li[1]"
        # 元素：菜单栏/组织机构管理/院校管理
        self.menu_org_mgt_1 = By.XPATH, "//body/div[@id='app']/div[1]/div[2]/ul[1]/li[1]/ul[1]/li[1]"

        #元素：角色类型管理/角色类型名称
        self.input_role_type_name = By.XPATH,"//*[text()='角色类型名称:']/parent::div/div/div/input"
        #元素：角色类型管理/角色类型描述
        self.input_role_type_describe = By.XPATH,"//*[text()='角色类型描述:']/parent::div/div/div/textarea"
        #元素：角色类型管理/角色类型  搜索栏
        self.input_role_type = By.XPATH, "//*[@placeholder='角色类型' and @type='text']"
        #元素：角色类型管理/状态  搜索栏
        self.input_role_status = By.XPATH, "//*[@placeholder='状态' and @type='text']"

        # 元素：角色管理/编辑角色 按钮
        self.btn_edit_role = By.XPATH, "//tbody/tr[1]/td[1]/div[1]/div[1]/div[1]/*[contains(text(),'编辑角色')]"
        # 元素：角色管理/编辑权限 按钮
        self.btn_edit_limits = By.XPATH,  "//tbody/tr[1]/td[1]/div[1]/div[1]/div[1]/*[contains(text(),'编辑权限')]"
        # 元素：角色管理/删除权限 按钮
        self.btn_edit_delete = By.XPATH,  "//tbody/tr[1]/td[1]/div[1]/div[1]/div[1]/*[contains(text(),'删除')]"
        # 元素：角色管理/编辑角色/ 角色类型 输入框
        self.input_role_type = By.XPATH, "//*[text()='角色类型：']/parent::div/div/div/div/div/input"
        # 元素：角色管理/编辑权限/角色名称 输入框
        self.input_role_name = By.XPATH,  "//*[text()='角色名称：']/parent::div/div/div/input"
        # 元素：角色管理/编辑权限/角色描述 输入框
        self.input_role_describe = By.XPATH,"//*[text()='角色描述：']/parent::div/div/div/textarea"
        # 元素：角色管理/搜索/请输入角色名称 输入框
        self.input_search_role_name = By.XPATH,"//div[@class='ivu-tooltip-rel']/div/*[@placeholder='请输入角色名称']"
        # 元素：角色管理/搜索/状态输入框
        self.input_search_role_status = By.XPATH,"//*[@placeholder='请选择状态']"

        # 元素：用户管理/添加员工
        self.btn_add_one = By.XPATH, "//span[contains(text(),'添加员工')]"
        # 元素：用户管理/添加员工/编辑/姓名
        self.input_new_one_name = By.XPATH, "//*[text()='姓名:']/parent::div/div/div/input"
        # 元素：用户管理/添加员工/编辑/身份证号
        self.input_new_one_card = By.XPATH, "//*[text()='身份证号:']/parent::div/div/div/input"
        # 元素：用户管理/添加员工/编辑/工号
        self.input_new_one_account = By.XPATH, "//*[text()='工号:']/parent::div/div/div/input"
        # 元素：用户管理/添加员工/编辑/私人手机号
        self.input_new_one_phone = By.XPATH, "//*[text()='私人手机号:']/parent::div/div/div/input"
        # 元素：用户管理/添加员工/编辑/角色名称
        self.input_new_one_role_name = By.XPATH, "//*[text()='角色名称:']/parent::div/div/div/div/div/input"
        # 元素：用户管理/搜索/姓名搜索
        self.input_search_user_name = By.XPATH,"//input[@placeholder='姓名']"
        # 元素：用户管理/编辑 按钮
        self.btn_user_name_edit = By.XPATH,"//tbody/tr[1]/td[1]/div[1]/div[1]/*[contains(text(),'编辑')]"
        # 元素：用户管理/重置密码 按钮
        self.btn_user_reset = By.XPATH,"//tbody/tr[1]/td[1]/div[1]/div[1]/*[contains(text(),'重置密码')]"
        # 元素：用户管理/禁用 按钮
        self.btn_user_disable = By.XPATH,"//tbody/tr[1]/td[1]/div[1]/div[1]/*[contains(text(),'禁用')]"
        # 元素：用户管理/启用 按钮
        self.btn_user_able = By.XPATH,"//tbody/tr[1]/td[1]/div[1]/div[1]/*[contains(text(),'启用')]"


        # 元素：用户管理/添加下级部门 按钮
        self.btn_org_add = By.XPATH,"//li[contains(text(),'添加下级部门')]"
        # 元素：用户管理/编辑部门 按钮
        self.btn_org_edit = By.XPATH,"//li[contains(text(),'编辑部门')]"
        # 元素：用户管理/删除部门 按钮
        self.btn_org_delete = By.XPATH,"//li[contains(text(),'删除部门')]"
        # 元素：用户管理/当前部门 输入框
        self.input_org_name = By.XPATH,"//*[text()='当前部门:']/parent::div/div/div/input"

    @allure.step(title="操作步骤:点击菜单栏/组织机构管理/子菜单项")
    def click_menu_org_mgt(self,choose=1):
        time.sleep(2)
        self.click(self.menu_system_mgt) # 点击菜单栏/教学管理
        time.sleep(1)
        menu_choose = By.XPATH, "//body/div[@id='app']/div[1]/div[2]/ul[1]/li[1]/ul[1]/li[{0}]".format(choose)
        self.click(menu_choose)
        return time.sleep(2)

    @allure.step(title="操作步骤:编辑或设置权限操作，保存设置")
    def choose_data_to_edit_or_set(self,do_i=1,choose=1,set_btn=1):
        if do_i==1:
            # 元素：院校管理/设置权限按钮
            locater = By.XPATH, "//tbody/tr[{0}]/td[1]/div[1]/div[1]/div[1]/*[text()='编辑']".format(choose)
        elif do_i==2:
            # 元素：院校管理/设置权限按钮
            locater = By.XPATH, "//tbody/tr[{0}]/td[1]/div[1]/div[1]/div[1]/*[text()='设置权限']".format(choose)
        elif do_i == 3:
            # 元素：学习中心管理/设置学习中心权限
            locater = By.XPATH, "//span[contains(text(),'设置学习中心权限')]"
        else:
            # 元素：院校管理/批量配置权限按钮
            locater = By.XPATH, "//*[text()='批量配置权限']"
        self.choose_data_to_click(locater) # 选择第几个数据点击指定操作按钮
        if set_btn == 1:
            self.click_to_confirm()# 点击确认
        else:
            self.click_to_save() # 点击保存

    @allure.step(title="操作步骤:编辑角色类型，保存")
    def role_type_to_edit(self,role_name,role_describe):
        self.clear(self.input_role_type_name) #清空名字
        self.input(self.input_role_type_name,role_name) #输入名字
        self.clear(self.input_role_type_describe) #清空描述
        self.input(self.input_role_type_describe,role_describe) #输入描述
        self.click_to_confirm()# 点击确认


    @allure.step(title="操作步骤:角色，点击编辑角色按钮")
    def click_to_edit_role(self):
        return self.click(self.btn_edit_role)

    @allure.step(title="操作步骤:角色，点击编辑权限按钮")
    def click_to_edit_role_limits(self):
        return self.click(self.btn_edit_limits)

    @allure.step(title="操作步骤:角色，点击删除按钮")
    def click_to_edit_role_delete(self):
        return self.click(self.btn_edit_delete)

    @allure.step(title="操作步骤:点击添加用户")
    def click_to_add_user(self):
        return self.click(self.btn_add_one)

    @allure.step(title="操作步骤:用户，点击编辑用户按钮")
    def click_to_edit_user(self):
        return self.click(self.btn_user_name_edit)

    @allure.step(title="操作步骤:用户，点击重置密码按钮")
    def click_to_reset_user_passwd(self):
        return self.click(self.btn_user_reset)

    @allure.step(title="操作步骤:用户，点击禁用用户按钮")
    def click_to_disable_user(self,mode=0):
        if mode==0:
            self.click(self.btn_user_disable)
            self.alert_click_to_confirm()  # 点击确认
        else:self.click(self.btn_user_able)

    @allure.step(title="操作步骤:右键，点击指定操作")
    def org_rightclick_to_do(self,org_name,do="add"):
        # 元素：用户管理/部门名称
        org = By.XPATH,"//span[contains(text(),'{0}')]".format(org_name)
        self.right_click(org)#右键，点击 #右键操作
        if do=="edit":
            locate = self.btn_org_edit
        elif do =="delete":
            locate = self.btn_org_delete
        else:locate = self.btn_org_add
        return self.click(locate)

    @allure.step(title="操作步骤:编辑角色信息，保存")
    def role_to_edit(self,type,name,radio_text,describe):
        self.input(self.input_role_type,type)
        BaseCommon.choose_1st_select(self)#选择下拉第一个设置角色类型
        self.clear(self.input_role_name) #清空名字
        self.input(self.input_role_name,name) #输入名字
        self.click_give_text_radio(text=radio_text)#单选
        self.clear(self.input_role_describe) #清空描述
        self.input(self.input_role_describe,describe) #输入描述
        self.click_to_save()# 点击保存

    @allure.step(title="操作步骤:编辑用户信息，保存")
    def user_to_edit(self,name,card,account,phone,role_name):
        self.clear(self.input_new_one_name)
        self.input(self.input_new_one_name, name) #设置姓名
        self.clear(self.input_new_one_card)
        self.input(self.input_new_one_card, card)  # 设置身份证
        self.clear(self.input_new_one_account)
        self.input(self.input_new_one_account, account)  # 设置工号
        self.clear(self.input_new_one_phone)
        self.input(self.input_new_one_phone, phone)  # 设置手机号
        self.input(self.input_new_one_role_name,role_name)
        BaseCommon.choose_1st_select(self) #设置角色类型
        self.click_to_confirm()  # 确认新建

    @allure.step(title="操作步骤:新增部门，编辑信息，确认保存")
    def org_to_edit(self,org_new_name):
        self.clear(self.input_org_name)
        self.input(self.input_org_name, org_new_name)
        return self.click_to_confirm()

    @allure.step(title="操作步骤:新增部门，编辑信息，确认保存")
    def org_to_delete(self,org_name):
        self.clear(self.input_org_name)
        self.input(self.input_org_name, org_name)
        return self.click_to_confirm()
